package com.oliver.oliveraiagent.agent;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;

/**
 * @ClassName ReActAget
 * @Description TODO
 * @Author snow
 * @Date 2025/5/24 0:43
 **/

/**
 * ReAct（Reasoning and Actin）模式的代理抽象类
 * 实现了 思考 - 行动的循环模式
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
public abstract class ReActAgent extends BaseAgent {

    /**
     * 处理当前状态并决定下一行动
     *
     * @return 是否需要执行行动，true代表需要执行，false代表不需要执行
     */
    public abstract boolean think();

    /**
     * 执行决定的行动
     *
     * @return 行动执行结果
     */
    public abstract String act();

    /**
     * 执行单个步骤，思考和行动
     *
     * @return 执行步骤结果
     */
    @Override
    public String step() {
        try {
            //  先思考，判断是否需要执行
            boolean shouldAct = think();
            if (!shouldAct) {
                return "思考结束：无需行动";
            }
            return act();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("ReAct Agent 执行步骤失败：" + e.getMessage());
            return "执行步骤失败：" + e.getMessage();
        }

    }
}
